package org.fujay.langchain4jserver.domain.knowledge.repository;

import org.fujay.langchain4jserver.domain.knowledge.entity.File;
import org.fujay.langchain4jserver.domain.knowledge.vo.FileId;
import org.fujay.langchain4jserver.domain.knowledge.vo.KnowledgeBaseId;

import java.util.List;
import java.util.Optional;

/**
 * 文件仓储接口 (辅助知识库聚合)
 */
public interface FileRepository {

    /**
     * 根据文件ID查找文件
     *
     * @param id 文件ID
     * @return 文件实体 Optional
     */
    Optional<File> findById(FileId id);

    /**
     * 根据知识库ID查找所有文件 (主要由 KnowledgeBaseRepository 在加载聚合根时调用)
     *
     * @param knowledgeBaseId 知识库ID
     * @return 文件列表
     */
    List<File> findByKnowledgeBaseId(KnowledgeBaseId knowledgeBaseId);

    /**
     * 保存单个文件 (通常由聚合根的 save 方法触发)
     *
     * @param file            文件实体
     * @param knowledgeBaseId 关联的知识库ID
     */
    void save(File file, KnowledgeBaseId knowledgeBaseId);

    /**
     * 批量保存文件 (用于聚合根保存)
     *
     * @param files           文件列表
     * @param knowledgeBaseId 关联的知识库ID
     */
    void saveAll(List<File> files, KnowledgeBaseId knowledgeBaseId);

    /**
     * 根据文件ID删除文件
     *
     * @param id 文件ID
     */
    void deleteById(FileId id);

    /**
     * 根据知识库ID删除所有文件
     *
     * @param knowledgeBaseId 知识库ID
     */
    void deleteByKnowledgeBaseId(KnowledgeBaseId knowledgeBaseId);
}
